package model;

import java.util.ArrayList;

/**
 * Het pad bepaald door de PathFinder. Bestaand uit een reeks stappen van een
 * start locatie tot een doel locatie. Dit is inclusief de laatste stap
 * @author Alvin & Roy
 */
public class Path {
	/** Lijst van stappen */
	private ArrayList<Step> steps;

	/**
	 * constructor
	 */
	public Path() {
            steps = new ArrayList<Step>();
	}

	/**
	 * Haal de lengte van het pad op -> het aantal stappen
	 *
	 * @return De lengte van het pad
	 */
	public int getLength() {
		return steps.size();
	}

	/**
	 * Haal een gegeven stap op
	 *
	 * @param index Het nummer van de stap, voor dit nummer geldt:
         * nummer >= 0 & nummer < padlengte
	 * @return De stap
	 */
	public Step getStep(int index) {
		return steps.get(index);
	}

	/**
	 * Haal de x positie van een bepaalde stap op
	 *
	 * @param index Het nummer van de stap
	 * @return De x positie van de stap
	 */
	public int getX(int index) {
		return getStep(index).getX();
	}

	/**
	 * Haal de y positie van een bepaalde stap op
	 *
	 * @param index Het nummer van de stap
	 * @return De y positie van de stap
	 */
	public int getY(int index) {
		return getStep(index).getY();
	}

	/**
	 * Voeg een stap aan het einde van de lijst toe
	 *
	 * @param x De x positie van de stap
	 * @param y De y positie van de stap
	 */
	public void appendStep(int x, int y) {
		steps.add(new Step(x,y));
	}

	/**
	 * Voeg een stap toe aan het begin van de lijst
	 *
	 * @param x De x positie van de stap
	 * @param y De y positie van de stap
	 */
	public void prependStep(int x, int y) {
		steps.add(0, new Step(x, y));
	}

	/**
	 * Controleer of een bepaalde stap in het pad ligt
	 *
	 * @param x De x positie van de stap
	 * @param y De y positie van de stap
	 * @return Of het pad de stap bevat
	 */
	public boolean contains(int x, int y) {
		return steps.contains(new Step(x,y));
	}
}
